package net.zoneland.knowledge.service;

import java.util.List;

import net.zoneland.knowledge.model.LoginUserPojo;
import net.zoneland.knowledge.model.WorkApplyInfo;
import net.zoneland.knowledge.model.WorkDoneStatusInfo;

/**
 * 已办任务状态服务.
 * @author bcc
 */
public interface WorkDoneStatusInfoService {

    /**
     * 保存或者更新已办状态信息.
     * @param workDoneStatusInfo 已办状态信息
     */
    void saveOrUpdate(WorkDoneStatusInfo workDoneStatusInfo);

    /**
     * 这里的状态跟原来的节点和流程图都不一样，需要自行判断.
     * 所有状态： 拟稿、办理、办理中、待确认、完成、办结 这6种
     * 主工单状态: 拟稿、办理、办理中、办结
     * 子工单状态：办理、办理中、待确认、完成
     * 状态显示优先级:
     * 自身 > 下级 > 上级
     * 办理  办理中  待确认
     * 环节判断只考虑相邻的上下两级，不考虑跨多级的情况
     * 每次处理都需要考虑上一级工单，当前工单，子工单，三层
     * @param info 工单信息
     * @param parentWorkApplyInfo 父工单
     * @param subApplys 受影响子工单.
     * @param user 当前用户
     */
    void dealWorkApplyDoneStatus(final WorkApplyInfo info,
                                 final WorkApplyInfo parentWorkApplyInfo,
                                 final List<WorkApplyInfo> subApplys,
                                 final LoginUserPojo user);

    /**
     * 处理印章申请的已办信息.
     * @param info 工单
     * @param user 当前用户
     */
    void dealChapterApplyDoneStatus(final WorkApplyInfo info, final LoginUserPojo user);

    /**
     * 保存状态时设置特殊的状态.
     * @param workApplyInfo 工单
     * @param user 当前用户
     */
    void saveDraftWorkApplyDoneStatus(WorkApplyInfo workApplyInfo, LoginUserPojo user);

    /**
     * 保存已办记录。
     * @param info 已办记录
     */
    void saveDoneInfo(WorkDoneStatusInfo info);
}
